#pragma once
#include "InputSubscriber.h"
#include "GeneralCamera.h"

class OgreFramework;

namespace Ogre
  {
  class OverlaySystem;
  }

class MonkeyScene : public InputSubscriber
  {
  private:
    OgreFramework&  m_ogre_framework;
    

    std::unique_ptr<GeneralCamera> mp_camera;
	std::shared_ptr<Ogre::OverlaySystem> mp_overlay;

  private:
    void _CreateScene();
    void _LoadTerrain();

  public:
    MonkeyScene(OgreFramework& i_ogre_framework, std::shared_ptr<Ogre::OverlaySystem> i_overlay);
    ~MonkeyScene();

    GeneralCamera& CameraMan();

  // InputSubscriber
  public:
    virtual bool KeyPressed(const OIS::KeyEvent &keyEventRef) override;
    virtual bool KeyReleased(const OIS::KeyEvent &keyEventRef) override;

    virtual bool MouseMoved(const OIS::MouseEvent &evt) override;
    virtual bool MousePressed(const OIS::MouseEvent &evt, OIS::MouseButtonID id) override;
    virtual bool MouseReleased(const OIS::MouseEvent &evt, OIS::MouseButtonID id) override;
  };

//////////////////////////////////////////////////////////////////////////

inline GeneralCamera& MonkeyScene::CameraMan()
  {
  return *mp_camera;
  }